![]() |
![]() |
![]() | |
![]() ![]() ![]() ![]()
╤εß√≥Φ |
╬∩Φ±αφΦσ Φ±⌡εΣφεπε ≥σΩ±≥α┬ φα°σ∞ α∩δσ≥σ ∞√ ß≤Σσ∞ ±ετΣαΓα≥ⁿ εß·σΩ≥ Ωδα±±α Vector, Ωε≥ε≡√Θ Γδ σ≥± ∞α±±ΦΓε∞ ± ΣΦφα∞Φ≈σ±ΩΦ Φτ∞σφ σ∞√∞ ≡ατ∞σ≡ε∞. ╟Σσ±ⁿ ∞√ ß≤Σσ∞ ⌡≡αφΦ≥ⁿ Ωεε≡ΣΦφα≥√ φα≡Φ±εΓαφφ√⌡ δΦφΦΘ. ╩δα±± Vector Φ∞σσ≥ ∩εδφεσ Φ∞ java.util.Vector, ∩ε²≥ε∞≤ ∞√ ∩εΣΩδ■≈ασ∞ ±εε≥Γσ≥±≥Γ≤■∙≤■ ßΦßδΦε≥σΩ≤ Ωδα±±εΓ: import java.util.*; ╧εδ Ωδα±±α LineDraw┬ φα°σ∞ Ωδα±±σ ∞√ ε∩≡σΣσδΦδΦ φσ±ΩεδⁿΩε ∩εδσΘ, ∩≡σΣφατφα≈σφφ√⌡ Σδ ⌡≡αφσφΦ ≥σΩ≤∙Φ⌡ Ωεε≡ΣΦφα≥ ≡Φ±≤σ∞√⌡ δΦφΦΘ: Dimension dmDown; Dimension dmUp; Dimension dmPrev; boolean bDrawing; Vector lines; ┬ ∩σ≡σ∞σφφ≤■ dmDown Ωδα±±α Dimension τα∩Φ±√Γα■≥± Ωεε≡ΣΦφα≥√ Ω≤≡±ε≡α φα ∞ε∞σφ≥ φαµα≥Φ ΩδαΓΦ°Φ ∞√°Φ. ┼±δΦ ∩εδⁿτεΓα≥σδⁿ φαµαδ ΩδαΓΦ°≤ ∞√°Φ Σδ ≥επε ≈≥εß√ ∩≡Φ±≥≤∩Φ≥ⁿ Ω ≡Φ±εΓαφΦ■ δΦφΦΦ, ²≥ε ß≤Σσ≥ Ωεε≡ΣΦφα≥α∞Φ φα≈αδα δΦφΦΦ. ╩επΣα ∩εδⁿτεΓα≥σδⁿ ε≥∩≤±Ωασ≥ ΩδαΓΦ°≤ ∞√°Φ, Ωεε≡ΣΦφα≥√ τα∩Φ±√Γα■≥± Γ ∩σ≡σ∞σφφ≤■ dmUp. ┬ ∩≡ε÷σ±±σ ≡Φ±εΓαφΦ δΦφΦΦ ∞σ≥εΣ mouseDrag ±≥Φ≡ασ≥ ≡αφσσ φα≡Φ±εΓαφφ≤■ δΦφΦ■ Φ ≡Φ±≤σ≥ φεΓ≤■. ╩εε≡ΣΦφα≥√ Ωεφ÷α ±≥α≡εΘ δΦφΦΦ ⌡≡αφ ≥± Γ ∩σ≡σ∞σφφεΘ dmPrev. ╧σ≡σ∞σφφα bDrawing ≥Φ∩α boolean ⌡≡αφΦ≥ ≥σΩ≤∙σσ ±ε±≥ε φΦσ α∩δσ≥α. ╩επΣα α∩δσ≥ φα⌡εΣΦ≥± Γ ±ε±≥ε φΦΦ ≡Φ±εΓαφΦ δΦφΦΦ, Γ ²≥≤ ∩σ≡σ∞σφφ≤■ τα∩Φ±√Γασ≥± τφα≈σφΦσ true, α ΩεπΣα φσ≥ - τφα≈σφΦσ false. ╚, φαΩεφσ÷, ∩σ≡σ∞σφφα lines ≥Φ∩α Vector Γδ σ≥± ΣΦφα∞Φ≈σ±ΩΦ∞ ∞α±±ΦΓε∞, Γ Ωε≥ε≡ε∞ ⌡≡αφ ≥± Ωεε≡ΣΦφα≥√ φα≡Φ±εΓαφφ√⌡ δΦφΦΘ. ╠σ≥εΣ getAppletInfo╠σ≥εΣ getAppletInfo ΓετΓ≡α∙ασ≥ φατΓαφΦσ α∩δσ≥α Φ φσ Φ∞σσ≥ φΦΩαΩΦ⌡ ε±εßσφφε±≥σΘ. ╠σ≥εΣ init╠σ≥εΣ init ±ß≡α±√Γασ≥ ∩≡ΦτφαΩ ≡Φ±εΓαφΦ , τα∩Φ±√Γα Γ ∩εδσ bDrawing τφα≈σφΦσ false, α ≥αΩµσ ±ετΣασ≥ φεΓ√Θ ΣΦφα∞Φ≈σ±ΩΦΘ ∞α±±ΦΓ Γ ΓΦΣσ εß·σΩ≥α Ωδα±±α Vector: public void init() { bDrawing = false; lines = new Vector(); } ╠σ≥εΣ paint╧ε±δσ Φτ∞σφσφΦ ÷Γσ≥α ⌠εφα Φ ≡Φ±εΓαφΦ ≡α∞ΩΦ ∞σ≥εΣ paint ∩σ≡σßΦ≡ασ≥ Γ ÷ΦΩδσ Γ±σ ²δσ∞σφ≥√ ∞α±±ΦΓα lines, ≡Φ±≤ δΦφΦΦ: for(int i=0; i < lines.size(); i++) { Rectangle p = (Rectangle)lines.elementAt(i); g.drawLine( p.width, p.height, p.x, p.y); g.drawString("<" + p.width + "," + p.height + ">", p.width, p.height); g.drawString("<" + p.x + "," + p.y+ ">", p.x, p.y); } ─δ εß·σΩ≥εΓ Ωδα±±α Vector ∞σ≥εΣ size ΓετΓ≡α∙ασ≥ ΩεδΦ≈σ±≥Γε ²δσ∞σφ≥εΓ Γ ∞α±±ΦΓσ, ≈σ∞ ∞√ Γε±∩εδⁿτεΓαδΦ±ⁿ Σδ ∩≡εΓσ≡ΩΦ ≤±δεΓΦ Γ√⌡εΣα Φτ ÷ΦΩδα. ╫≥εß√ ΦτΓδσ≈ⁿ ²δσ∞σφ≥ ∞α±±ΦΓα ∩ε σπε φε∞σ≡≤, ∞√ ∩≡Φ∞σφΦδΦ ∞σ≥εΣ elementAt, ∩σ≡σΣαΓ σ∞≤ ≈σ≡στ σΣΦφ±≥Γσφφ√Θ ∩α≡α∞σ≥≡ φε∞σ≡ ΦτΓδσΩασ∞επε ²δσ∞σφ≥α. ╥αΩ ΩαΩ Γ ∞α±±ΦΓσ ⌡≡αφ ≥± εß·σΩ≥√ Ωδα±±α Rectangle, ∩σ≡σΣ ΦφΦ÷ΦαδΦτα÷ΦσΘ ±±√δΩΦ p ∞√ Γ√∩εδφ σ∞ Γφεσ ∩≡σεß≡ατεΓαφΦσ ≥Φ∩εΓ. ╩εε≡ΣΦφα≥√ Ωεφ÷εΓ δΦφΦΘ ≡Φ±≤■≥± ± ∩ε∞ε∙ⁿ■ ≤µσ τφαΩε∞επε Γα∞ ∞σ≥εΣα drawString. ╧σ≡σΣ ταΓσ≡°σφΦσ∞ ≡αßε≥√ ∞σ≥εΣ paint ±ß≡α±√Γασ≥ ∩≡ΦτφαΩ ≡Φ±εΓαφΦ , τα∩Φ±√Γα Γ ∩εδσ bDrawing τφα≈σφΦσ false: bDrawing = false; ╠σ≥εΣ mouseDown┬ φα≈αδσ ±ΓεσΘ ≡αßε≥√ ∞σ≥εΣ mouseDown ε∩≡σΣσδ σ≥, ß√δ δΦ ±Σσδαφ εΣΦφα≡φ√Θ ∙σδ≈εΩ ΩδαΓΦ°σΘ ∞√°Φ, ΦδΦ ΣΓεΘφεΘ. ┼±δΦ ß√δ ±Σσδαφ ΣΓεΘφεΘ ∙σδ≈εΩ ∞√°ⁿ■, ∞σ≥εΣ ≤Σαδ σ≥ Γ±σ ²δσ∞σφ≥√ Φτ ∞α±±ΦΓα list, α τα≥σ∞ ∩σ≡σ≡Φ±εΓ√Γασ≥ εΩφε α∩δσ≥α, Γ√τ√Γα ∞σ≥εΣ repaint: lines.removeAllElements(); repaint(); ╧ε±δσ ∩σ≡σ≡Φ±εΓΩΦ εΩφε α∩δσ≥α ε≈Φ∙ασ≥± ε≥ δΦφΦΘ. ┼±δΦ µσ ß√δ ±Σσδαφ εΣΦφα≡φ√Θ ∙σδ≈εΩ ΩδαΓΦ°σΘ ∞√°Φ, ∞σ≥εΣ mouseDown ±ε⌡≡αφ σ≥ ≥σΩ≤∙Φσ Ωεε≡ΣΦφα≥√ Ω≤≡±ε≡α Γ ∩σ≡σ∞σφφ√⌡ dmDown Φ dmPrev, α τα≥σ∞ ±ß≡α±√Γασ≥ ∩≡ΦτφαΩ ≡Φ±εΓαφΦ : dmDown = new Dimension(x, y); dmPrev = new Dimension(x, y); bDrawing = false; ╠σ≥εΣ mouseUp╩επΣα ∩εδⁿτεΓα≥σδⁿ ε≥∩≤±Ωασ≥ ΩδαΓΦ°≤ ∞√°Φ, Γ√τ√Γασ≥± ∞σ≥εΣ mouseUp. ┬ σπε ταΣα≈≤ Γ⌡εΣΦ≥ ±ε⌡≡αφσφΦσ ≥σΩ≤∙Φ⌡ Ωεε≡ΣΦφα≥ Ω≤≡±ε≡α ∞√°Φ Γ ∩εδσ dmUp, α ≥αΩµσ ΣεßαΓδσφΦσ φεΓεπε ²δσ∞σφ≥α Γ ∞α±±ΦΓ lines: dmUp = new Dimension(x, y); lines.addElement( new Rectangle(dmDown.width, dmDown.height, x, y)); repaint(); ╧ε±δσ ΣεßαΓδσφΦ ²δσ∞σφ≥α Γ ∞α±±ΦΓ ∞σ≥εΣ mouseUp ΦφΦ÷ΦΦ≡≤σ≥ ∩σ≡σ≡Φ±εΓΩ≤ εΩφα α∩δσ≥α, Γ√τ√Γα Σδ ²≥επε ∞σ≥εΣ repaint. ╟α∞σ≥Φ∞, ≈≥ε Γ Ωα≈σ±≥Γσ Ωεε≡ΣΦφα≥ φα≈αδα δΦφΦΦ ∞√ τα∩Φ±√Γασ∞ Γ ²δσ∞σφ≥ ∞α±±ΦΓα Ωεε≡ΣΦφα≥√ ≥ε≈ΩΦ, πΣσ Γ ∩ε±δσΣφΦΘ ≡ατ ∩εδⁿτεΓα≥σδⁿ φαµΦ∞αδ Ω≤≡±ε≡ ∞√°Φ. ┬ Ωα≈σ±≥Γσ Ωεε≡ΣΦφα≥ Ωεφ÷α δΦφΦΦ Φ±∩εδⁿτ≤■≥± ≥σΩ≤∙Φσ Ωεε≡ΣΦφα≥√ Ω≤≡±ε≡α φα ∞ε∞σφ≥ ε≥∩≤±ΩαφΦ ΩδαΓΦ°Φ ∞√°Φ. ╠σ≥εΣ mouseDrag─ε ±Φ⌡ ∩ε≡ φα°Φ α∩δσ≥√ Γ√∩εδφ δΦ ≡Φ±εΓαφΦσ ≥εδⁿΩε Γ ∞σ≥εΣσ paint, Φ ≥αΩ ∩ε±≥≤∩α■≥ ßεδⁿ°Φφ±≥Γε α∩δσ≥εΓ. ╬ΣφαΩε φα° α∩δσ≥ Σεδµσφ ≡Φ±εΓα≥ⁿ δΦφΦΦ Γε Γ≡σ∞ ∩σ≡σ∞σ∙σφΦ Ω≤≡±ε≡α ∞√°Φ, ≥αΩ ΩαΩ Γ ∩≡ε≥ΦΓφε∞ ±δ≤≈ασ ∩εδⁿτεΓα≥σδ■ φσ ß≤Σσ≥ ΓΦΣφε, ΩαΩ ∩≡εΘΣσ≥ ≡Φ±≤σ∞α δΦφΦ . ─δ ≥επε ≈≥εß√ φα≡Φ±εΓα≥ⁿ ≈≥ε-δΦßε Γ εΩφσ α∩δσ≥α, φαεß⌡εΣΦ∞ε ∩εδ≤≈Φ≥ⁿ Ωεφ≥σΩ±≥ ε≥εß≡αµσφΦ . ╠σ≥εΣ≤ paint ²≥ε≥ Ωεφ≥σΩ±≥ ∩σ≡σΣασ≥± ≈σ≡στ ∩α≡∞σ≥≡ ΩαΩ εß·σΩ≥ Ωδα±±α Graphics. ┼±δΦ µσ Γ√ ±εßΦ≡ασ≥σ±ⁿ ≡Φ±εΓα≥ⁿ Γ Σ≡≤πε∞ ∞σ≥εΣσ, ε≥δΦ≈φε∞ ε≥ paint, φσεß⌡εΣΦ∞ε ∩εδ≤≈Φ≥ⁿ Ωεφ≥σΩ±≥ ε≥εß≡αµσφΦ , φα∩≡Φ∞σ≡, ≥αΩ: Graphics g = getGraphics(); ╧ε±δσ ∩εδ≤≈σφΦ Ωεφ≥σΩ±≥α ε≥εß≡αµσφΦ Φ ΓΩδ■≈σφΦ ≡σµΦ∞α ≡Φ±εΓαφΦ (τα∩Φ±ⁿ■ Γ ∩σ≡σ∞σφφ≤■ bDrawing τφα≈σφΦ true) ∞σ≥εΣ mouseDrag ±≥Φ≡ασ≥ δΦφΦ■, Ωε≥ε≡α ß√δα φα≡Φ±εΓαφα ≡αφσσ, Γ ∩≡ε÷σ±±σ ∩≡σΣ√Σ≤∙σπε Γ√τεΓα ²≥επε µσ ∞σ≥εΣα: g.setColor(Color.yellow); g.drawLine(dmDown.width, dmDown.height, dmPrev.width, dmPrev.height); ─δ ±≥Φ≡αφΦ δΦφΦΦ ∞√ ≡Φ±≤σ∞ σσ φα ≥ε∞ µσ ∞σ±≥σ ± Φ±∩εδⁿτεΓαφΦσ∞ ÷Γσ≥α, ±εΓ∩αΣα■∙σπε ± ÷Γσ≥ε∞ ⌠εφα. ─αδσσ ∞σ≥εΣ mouseDrag ≡Φ±≤σ≥ φεΓ≤■ δΦφΦ■ ≈σ≡φεπε ÷Γσ≥α, ±εσΣΦφ ≥ε≈Ω≤, Γ Ωε≥ε≡εΘ ß√δα φαµα≥α ΩδαΓΦ°α ∞√°Φ, ± ≥ε≈ΩεΘ ≥σΩ≤∙σπε ≡α±∩εδεµσφΦ Ω≤≡±ε≡α ∞√°Φ: g.setColor(Color.black); g.drawLine(dmDown.width, dmDown.height, x, y); ╧ε±δσ ≡Φ±εΓαφΦ δΦφΦΦ Ωεε≡ΣΦφα≥√ σσ Ωεφ÷α ±ε⌡≡αφ ■≥± Γ ∩εδσ dmPrev Σδ ±≥Φ≡αφΦ ²≥εΘ δΦφΦΦ ∩≡Φ ±δσΣ≤■∙σ∞ Γ√τεΓσ ∞σ≥εΣα mouseDrag: dmPrev = new Dimension(x, y); return true; ╠σ≥εΣ mouseMove╠σ≥εΣ mouseMove φσ Σσδασ≥ φΦ≈σπε, τα Φ±Ωδ■≈σφΦσ∞ ≥επε, ≈≥ε εφ ε≥Ωδ■≈ασ≥ ≡σµΦ∞ ≡Φ±εΓαφΦ . ╥αΩΦ∞ εß≡ατε∞, ∩≡ε±≥εσ ∩σ≡σ∞σ∙σφΦσ Ω≤≡±ε≡α ∞√°Φ φαΣ εΩφε∞ α∩δσ≥α φσ ∩≡ΦΓεΣΦ≥ Ω ≡Φ±εΓαφΦ■ δΦφΦΘ. |